package action

import scala.swing._
import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.Properties
import lang.LOC
import scala.io._
import parser._
import gui._
import scala.swing._
import scala.swing.Dialog._
import javax.swing.JOptionPane
import java.util.ArrayList

/*
 * Diese Klasse erbt von der Action-Klasse und ist fuer die Funktionen des Hilfe-Menues
 * zustaendig. Hierzu wird ueber das Attribut subAction die jeweilige Aktion aufgerufen.
 */

case class MenuQuest(name: String, tt: Layout, subAction: Int) extends Action(name) {

  def apply() = {
    subAction match {
      case 1 => // Hilfe(=Startseite) anzeigen
        var open = false
        var openindex:Int = 0
        for(i <- 0 to tt.tabstop.peer.getTabCount-1) {
          var ttab = tt.tabstop.getComponent(i)
          if(ttab != null && ttab.isInstanceOf[BorderPanel]) {
            if(ttab.asInstanceOf[BorderPanel].equals(Layout.startuptab)) {
              open = true
              openindex = i
            }
          }
        }
        if(open) {
          tt.tabstop.setSelectedIndex(openindex)
        }
        else {
          tt.tabstop.addTab(LOC.get("Startseite"), Layout.startuptab, "icon_16.png")
          tt.tabstop.setSelectedIndex(tt.tabstop.peer.getTabCount-1)
        }

      case 201 =>
        changeLang("de", "Deutsch")
        
      case 202 =>
        changeLang("en", "Englisch")
        
      case 301 =>
        var opts = new ArrayList[String]()
        opts.add("10")
        opts.add("100")
        opts.add("1000")
        opts.add("10000")
        opts.add("100000")
        
        var in = JOptionPane.showInputDialog(tt.peer, LOC.get("TraceStepsAuswahlText") + ":",
                                             LOC.get("Auswahl"), JOptionPane.QUESTION_MESSAGE,
                                             icon, null, Layout.tracesteps) match {
          case x:String => x
          case _ => null
        }
        if(in != null) {
          change("tracesteps", in.toInt)
          Layout.tracesteps = in.toInt
        }

      case 302 =>
        var opts = new ArrayList[String]()
        opts.add("8")
        opts.add("9")
        opts.add("10")
        opts.add("11")
        opts.add("12")
        
        var in = JOptionPane.showInputDialog(tt.peer, LOC.get("PrintSizeAuswahlText") + ":",
                                             LOC.get("Auswahl"), JOptionPane.QUESTION_MESSAGE,
                                             icon, opts.toArray, null) match {
          case x:String => x
          case _ => null
        }
        
        if(in != null) {
          change("printsize", in.toInt)
          Layout.printsize = in.toInt
        }
        
      case 4 =>
        Dialog.showMessage(tt, LOC.get("Infotext"), LOC.get("Infotitel"), Dialog.Message.Info)

      case _ =>
        println("Action5.scala")
    }
  }

  def changeLang(l: String, ll: String) : Unit = {
    //Einstellungen laden
    var prop = new Properties()
    var fis = new FileInputStream(CONST.CONFIG_FILE)
    prop.load(fis)
    prop.setProperty("language", l)
    var fos = new FileOutputStream(CONST.CONFIG_FILE)
    prop.store(fos, "config")
    fos.close()
    tt.statusBar.setMessage(LOC.get("Sprache") + ": " + LOC.get(ll))
    Dialog.showMessage(tt, LOC.get("SpracheNeustartText"), LOC.get("SpracheNeustart"),
                       Dialog.Message.Info)
  }
  
  def change(l: String, ll: Int) : Unit = {
    //Einstellungen laden
    var prop = new Properties()
    var fis = new FileInputStream(CONST.CONFIG_FILE)
    prop.load(fis)
    prop.setProperty(l, ll.toString)
    var fos = new FileOutputStream(CONST.CONFIG_FILE)
    prop.store(fos, "config")
    fos.close()
  }
  
}


 